package com.draby.fantasy.dataTypes;

import com.draby.fantasy.exceptions.ParamsLengthNotMatchException;

/**
 * 抽象地图，初始化与保存地图信息
 */
public abstract class Map {
    /**
     * 保存地图中每个格子的信息
     */
    private Block[][] maze;

    public Block[][] getMaze() {
        return maze;
    }

    void setMaze(Block[][] maze) {
        this.maze = maze;
    }

    /**
     * 初始化地图，参数长度根据实例化地图对象改变
     *
     * @return true: 初始化成功，否则返回 false
     * @throws ParamsLengthNotMatchException 参数长度不匹配异常
     */
    public abstract boolean initMap(int... values) throws ParamsLengthNotMatchException;

    /**
     * 重写 toString 方法，用于输出
     *
     * @return 重写后的字符串
     */
    @Override
    public String toString() {
        if (maze == null) {
            return null;
        }
        StringBuilder info = new StringBuilder();
        for (int i = 0; i < maze.length; i++) {
            for (int j = 0; j < maze[0].length; j++) {
                info.append("maze[").append(i).append("][").append(j).append("]: ").append(maze[i][j]).append("\n");
            }
            info.append("\n");
        }
        return info.toString();
    }
}
